<html>
  <head>
	  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>i5ting_ztree_toc:git命令</title>
		<link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
	  <style>
		pre {
		    counter-reset: line-numbering;
		    border: solid 1px #d9d9d9;
		    border-radius: 0;
		    background: #fff;
		    padding: 0;
		    line-height: 23px;
		    margin-bottom: 30px;
		    white-space: pre;
		    overflow-x: auto;
		    word-break: inherit;
		    word-wrap: inherit;
		}

		pre a::before {
		  content: counter(line-numbering);
		  counter-increment: line-numbering;
		  padding-right: 1em; /* space after numbers */
		  width: 25px;
		  text-align: right;
		  opacity: 0.7;
		  display: inline-block;
		  color: #aaa;
		  background: #eee;
		  margin-right: 16px;
		  padding: 2px 10px;
		  font-size: 13px;
		  -webkit-touch-callout: none;
		  -webkit-user-select: none;
		  -khtml-user-select: none;
		  -moz-user-select: none;
		  -ms-user-select: none;
		  user-select: none;
		}

		pre a:first-of-type::before {
		  padding-top: 10px;
		}

		pre a:last-of-type::before {
		  padding-bottom: 10px;
		}

		pre a:only-of-type::before {
		  padding: 10px;
		}

		.highlight { background-color: #ffffcc } /* RIGHT */
		</style>
  </head>
  <body>
	  <div>
				<div style='width:25%;'>
						<ul id="tree" class="ztree" style='width:100%'>

						</ul>
				</div>
        <div id='readme' style='width:70%;margin-left:20%;'>
          	<article class='markdown-body'>
            	<h1 id="git">git</h1>
<h2 id="git-">git 常用命令</h2>
<h3 id="git-">git工作流程</h3>
<blockquote>
<p><strong>每个公司的git工作流存在差异，以下列举了本人工作中的频繁使用的两套流程</strong></p>
</blockquote>
<blockquote>
<p><strong>假设:远程仓库上有两两个分支 laipz 和 dev, 其中 laipz 分支 存放本人 最新的代码，dev存放我与同事共同的代码</strong></p>
</blockquote>
<ul>
<li><strong>场景一：本人<font color="red">本地做了修改</font>，需要推到远程分支与同事代码合并</strong></li>
</ul>
<pre><code>git add . // 注：修改代码应该是在 本地laipz分支 修改
git commit -m &#39;备注信息&#39;
git push origin laipz // 以上三行代码将本地laipz分支推送到远程laipz分支
git checkout dev // 切换分支
git pull origin dev //拉取远程dev分支，确保远程dev分支 与 本地 dev分支同步 注：因为远程dev存放的是自己和同事共同的代码，所以需要拉取，避免本地dev分支不是最新的
git merge --no-ff laipz -m &#39;备注信息&#39; // 合并代码 将本地的laipz分支 合并到 本地的dev分支
git push origin dev //推送到远程的dev分支
git checkout laipz // 切换分支
git rebase dev // 变更分支，使得本地laipz分支的代码和本地dev分支一致
git push origin laipz //推送到远程的laipz分支

</code></pre><ul>
<li><strong>场景二：本人<font color="red">本地没有做任何修改</font>，同事将代码合并带远程分支，我需要拉取远程分支的最新代码。<font color="red">假设：同事合并后最新代码推送到远程共同的分支dev，而我要将本地laipz分支和远程dev分支保存一致</font></strong></li>
</ul>
<pre><code>git checkout dev // 切换分支
git pull origin dev // 将远程dev分支代码和本地dev分支代码同步
git checkout laipz // 切换分支
git rebase dev  // 变更分支，使得本地laipz分支的代码和本地dev分支一致
git push origin laipz //推送到远程的laipz分支

</code></pre><h3 id="-">其他常用命令</h3>
<ul>
<li><strong>回退版本</strong></li>
</ul>
<pre><code>git reset --hard 版本号 //回退到指定版本
git push -f -u origin 分支名 // 推送远程分支
</code></pre><ul>
<li><strong>查看分支</strong></li>
</ul>
<pre><code>git branch -r // 查看远程分支
git branch // 查看本地分支
git branch -a //查看所有分支
</code></pre><ul>
<li><strong>删除分支</strong></li>
</ul>
<pre><code>git push origin --delete 分支名称 // 删除远程分支
git branch -D 分支名称 // 删除本地分支
</code></pre><h2 id="git-">git 别名（简化命令）</h2>
<ul>
<li><strong>查看所有全局设置</strong></li>
</ul>
<pre><code>git config --global --list
</code></pre><ul>
<li><strong>设置别名</strong></li>
</ul>
<pre><code>//git config --global alias.别名 原来的命令
git config --global alias.co checkout
// git co 相当于 git checkout
</code></pre><ul>
<li><strong>删除别名</strong></li>
</ul>
<pre><code>git config --global --unset alias.别名
</code></pre><ul>
<li><p><strong>示例</strong></p>
<ul>
<li><p>这是我的别名设置</p>
<pre><code>  alias.a=commit -a -m
  alias.co=checkout
  alias.ps=push
  alias.pl=pull
  alias.rb=rebase
  alias.mg=merge --no-ff
</code></pre></li>
<li><p>场景一：简化后的命令</p>
<pre><code>  git a &#39;&#39; &amp;&amp; git ps &amp;&amp; git co dev &amp;&amp; git pl &amp;&amp; git mg laipz -m &#39;&#39;
  git ps &amp;&amp; git co laipz &amp;&amp; git rb dev &amp;&amp; git ps
</code></pre></li>
<li><p>场景二：简化后的命令</p>
<pre><code>  git co dev &amp;&amp; git pl &amp;&amp; git co laipz &amp;&amp; git rb dev &amp;&amp; git ps
</code></pre></li>
</ul>
</li>
</ul>
<h2 id="shell-">shell脚本执行多条命令</h2>
<ul>
<li><strong>查看git安装的路径</strong></li>
</ul>
<pre><code>where git //这是我的路径：C:\Program Files\Git\cmd\git.exe
</code></pre><h3 id="-shell-">用shell脚本批量执行上面两个场景的命令</h3>
<ul>
<li><p><strong>打开 C:\Program Files\Git\usr\bin</strong></p>
<ul>
<li><p><strong>新建以下三个文件</strong></p>
<ul>
<li><p><strong>mypush1.sh</strong></p>
<pre><code>
      DATA=&quot;$1&quot;合并到&quot;$2&quot;

      set -e

      git add .

      git commit -m $3

      git push origin $1

      echo -e &quot;\n\n\033[33m 1=====&gt;已经推送到远程分支&quot;$1&quot; \033[0m\n\n&quot;

      git checkout $2

      echo -e &quot;\n\n\033[33m 2=====&gt;切换分支&quot;$2&quot; \033[0m\n\n&quot;

      git pull origin $2

      echo -e &quot;\n\n\033[33m 3=====&gt;拉取分支&quot;$2&quot; \033[0m\n\n&quot;

      git merge --no-ff $1 -m ${DATA}

      echo -e &quot;\n\n\033[33m 4=====&gt;本地&quot;$1&quot;分支已经和本地&quot;$2&quot;分支合并 \033[0m\n\n&quot;

      echo -e &quot;\n\n\033[33m 5=====&gt;完成 \033[0m\n\n&quot;

      set +e

</code></pre></li>
<li><p><strong>mypush2.sh</strong></p>
<pre><code>
      set -e

      git push origin $1

      echo -e &quot;\n\n\033[33m 1=====&gt;已经推送到远程分支&quot;$1&quot; \033[0m\n\n&quot;

      git checkout $2

      echo -e &quot;\n\n\033[33m 2=====&gt;切换分支&quot;$2&quot; \033[0m\n\n&quot;

      git rebase $1

      echo -e &quot;\n\n\033[33m 3=====&gt;变更到分支&quot;$1&quot; \033[0m\n\n&quot;

      git push origin $2

      echo -e &quot;\n\n\033[33m 4=====&gt;已经推送到远程分支&quot;$2&quot; \033[0m\n\n&quot;

      echo -e &quot;\n\n\033[33m 5=====&gt;完成 \033[0m\n\n&quot;

      set +e

</code></pre></li>
<li><p><strong>mypull.sh</strong></p>
<pre><code>
      set -e

      git checkout $2

      echo -e &quot;\n\n\033[33m 1=====&gt;切换分支&quot;$2&quot; \033[0m\n\n&quot;

      git pull origin $2

      echo -e &quot;\n\n\033[33m 2=====&gt;拉取分支&quot;$2&quot; \033[0m\n\n&quot;

      git checkout $1

      echo -e &quot;\n\n\033[33m 3=====&gt;切换分支&quot;$1&quot; \033[0m\n\n&quot;

      git rebase $2

      echo -e &quot;\n\n\033[33m 4=====&gt;变更到分支&quot;$2&quot; \033[0m\n\n&quot;

      git push origin $1

      echo -e &quot;\n\n\033[33m 5=====&gt;已经推送到远程分支&quot;$1&quot; \033[0m\n\n&quot;

      echo -e &quot;\n\n\033[33m 6=====&gt;完成 \033[0m\n\n&quot;

      set +e

</code></pre></li>
</ul>
</li>
<li><p><strong>配置git bash 指令</strong></p>
<ul>
<li><p>查看是否有.bash_profile文件</p>
<pre><code>
cd ~ //切换到根目录

ll -al // 查询

//如果没有的话 执行下面创建

touch .bash_profile

vim .bash_profile

</code></pre></li>
<li><p>.bash_profile 配置</p>
<pre><code>
alias mypush1=&#39;mypush1.sh&#39;
alias mypush2=&#39;mypush2.sh&#39;
alias mypull=&#39;mypull.sh&#39;

</code></pre></li>
</ul>
</li>
<li><p><strong>简化后的场景命令</strong></p>
<ul>
<li><p>场景一：简化后的命令</p>
<pre><code>  mypush1 laipz dev &#39;&#39;
  mypush1 dev laipz
</code></pre></li>
<li><p>场景二：简化后的命令</p>
<pre><code>  mypull laipz dev
</code></pre></li>
</ul>
</li>
</ul>
</li>
</ul>

          	</article>
        </div>
		</div>
  </body>
</html>
<script type="text/javascript" src="toc/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="toc/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="toc/js/ztree_toc.js"></script>
<script type="text/javascript" src="toc_conf.js"></script>

<SCRIPT type="text/javascript" >
<!--
$(document).ready(function(){
    var css_conf = eval(markdown_panel_style);
    $('#readme').css(css_conf)
    
    var conf = eval(jquery_ztree_toc_opts);
		$('#tree').ztree_toc(conf);
});
//-->
</SCRIPT>